home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 001-025 / scopedisk11 / cprof12 / p-sieve.c next >
C/C++ Source or Header  |  1995-03-18  |  1KB  |  82 lines

  1. #define _PROFILER_ 
  2. extern long *_P_COUNT;
  3. long _P_ONEXIT();
  4. void _P_STOPWATCH(unsigned long,unsigned long,
  5.       unsigned long *,unsigned long *,unsigned long *);
  6. long _P_ACCESS(long);
  7. #define _P_DUMP 1
  8. #define _P_CLEAR 0 
  9. /*****************************************************************************
  10.  ***
  11.  *** The Sieve of Eratosthenes
  12.  ***
  13.  ***/
  14.  
  15. #include "time.h"
  16. #include "stdio.h"
  17. #define size 8190
  18. unsigned char flag[size+1];
  19. void main()
  20. {
  21.   register int i,k,p,primes;
  22.   int iter;
  23.   long t1,t2;
  24.   
  25. static unsigned long _P_FCN_SECS=0,_P_FCN_MICROS=0,
  26. _P_FCN_DEPTH=0;
  27. _P_PROFILE_SETUP();
  28. _P_STOPWATCH(1,0,&_P_FCN_SECS,&_P_FCN_MICROS,&_P_FCN_DEPTH);
  29. onexit(&_P_ONEXIT);
  30.  
  31. (*(_P_COUNT+1))++;
  32.   time(&t1);
  33.   for (iter=1;iter<=100;iter++)
  34.   {
  35.     
  36. (*(_P_COUNT+2))++;
  37.     for (i=0;i<=size;i++)
  38.       
  39. {(*(_P_COUNT+3))++;
  40.       flag[i]=1;
  41.  
  42.     
  43. }/*_P_*/
  44.  
  45. (*(_P_COUNT+4))++;
  46.     primes=0;
  47.     for (i=0;i<=size;i++)
  48.       {
  49. (*(_P_COUNT+5))++;
  50.       if (flag[i]==1)
  51.          {
  52. (*(_P_COUNT+6))++;
  53.          p=i+i+3;
  54.           for(k=i+p;k<=size;k+=p)
  55.             
  56. {(*(_P_COUNT+7))++;
  57.             flag[k]=0;
  58.           
  59. }/*_P_*/
  60.  
  61. (*(_P_COUNT+8))++;
  62.           primes++;
  63.           }
  64.        
  65. (*(_P_COUNT+9))++;
  66.       }
  67.   
  68. (*(_P_COUNT+10))++;
  69.  }
  70.   
  71. (*(_P_COUNT+11))++;
  72.   time(&t2);
  73.   printf("primes=%d in %ld seconds for 100 iterations\n",primes,(t2-t1));
  74.  
  75. _P_STOPWATCH(0,0,&_P_FCN_SECS,&_P_FCN_MICROS,&_P_FCN_DEPTH);
  76. }
  77. /*_P_FCN_*/
  78.  
  79.  
  80.  
  81. _P_PROFILE_SETUP(){_P_PROFILE_INIT(12,1);}
  82.